package com.mhg.reflect;

import com.mhg.collection.bean.Person;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;


//Field 属性
public class Demo_03 {

	public static void main(String[] args) throws Exception{
		//1.反射的入口
		Class<?> clazz = Class.forName("com.demo1.reflect.Person");
		//2.创建对象
		Constructor<?> c = clazz.getConstructor(String.class,int.class);
		Person p = (Person)c.newInstance("张三",23);
		//3.调用
		//1.被public 修饰的属性 如何调用 并赋值 取值
		Field f = clazz.getField("num"); //只能操作公有修饰的
		f.set(p, 10);//给指定对象的 指定 共有属性 进行赋值
		System.out.println(f.get(p));//获取指定对象的 指定共有属性的值 
		//2.所有的属性 getDeclaredField方法获取Field
		Field f2 =clazz.getDeclaredField("name"); //暴力反射
		//解除封装 去除权限 设置访问权限为true 
		f2.setAccessible(true);
		f2.set(p, "李四");
		System.out.println(f2.get(p));
		System.out.println(p.getName());
		
		//Field[] getDeclaredFields() 获取当前类中的所有属性
		Field[] fields = clazz.getDeclaredFields();
		for(Field f1:fields){
			// String getName() 返回此 Field 对象表示的字段的名称。 
			String name = f1.getName();
			System.out.println(name);
		}
		
	}

}